/*
A计划
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后，而今，不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主，因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚，告招天下勇士来拯救公主。不过公主早已习以为常，她深信智勇的骑士LJ肯定能将她救出。
现据密探所报，公主被关在一个两层的迷宫里，迷宫的入口是S（0，0，0），公主的位置用P表示，时空传输机用#表示，墙用*表示，平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置，但如果被转到的位置是墙的话，那骑士们就会被撞死。骑士们在一层中只能前后左右移动，每移动一格花1时刻。层间的移动只能通过时空传输机，且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据，每个测试数据的前一行有三个整数N，M，T。 N，M迷宫的大小N*M（1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况，后N*M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到公主就输出“YES”，否则输出“NO”。
Sample Input
1
5 5 14
S*#*.
.#...
.....
****.
...#.

..*.P
#.*..
***..
...*.
*.#..
Sample Output
YES
*/
#include <bits/stdc++.h>
#define ll long long
#define PI acos(-1)
#define M(n, m) memset(n, m, sizeof(n));
const int INF = 1e9 + 7;
const int maxn = 15;
using namespace std;

struct data
{
    int x, y;
    int floor;
    int step;
} st, pre;
char Map[2][maxn][maxn];
int n, m, T, limit;
bool vis[2][maxn][maxn], flag;
int dir[4][2]= {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};

void BFS()
{
    queue<data> que;
    st.x = st.y = st.floor = st.step = 0;
    vis[0][0][0] = 1;
    que.push(st);
    while(!que.empty())
    {
        st = que.front();
        que.pop();
        if (st.step > limit)
            return;
        if (Map[st.floor][st.x][st.y] == 'P')
        {
            cout << "YES" << endl;
            flag = true;
            return;
        }
        for (int i = 0;i < 4;i ++)
        {
            int x = st.x + dir[i][0];
            int y = st.y + dir[i][1];
            pre.floor = st.floor;

            // 所有不能走的情况，都要剔除
            if (x < 0 || x >= n || y < 0 || y >= m)
                continue;
            if (Map[pre.floor][x][y] == '*')
                continue;
            if (vis[pre.floor][x][y] == 1)
                continue;
            if (Map[pre.floor][x][y] == '#' && Map[!pre.floor][x][y] == '#')
                continue;
            if (Map[pre.floor][x][y] == '#' && Map[!pre.floor][x][y] == '*')
                continue;

            // 跳过去，注意要取反
            if (Map[pre.floor][x][y] == '#')
            {
                vis[pre.floor][x][y] = 1;
                pre.floor = !pre.floor;
            }
            // 走到下一个节点
            vis[pre.floor][x][y] = 1;
            pre.x = x, pre.y = y, pre.step = st.step + 1;
            que.push(pre);
        }
    }
}

int main()
{
    cin >> T;
    while(T --)
    {
        cin >> n >> m >> limit;
        for (int i = 0; i < 2; i ++)
            for (int j = 0; j < n; j ++)
                cin >> Map[i][j];
        M(vis, 0)
        flag = false;
        BFS();
        if (!flag)
            cout << "NO" << endl;
    }
    return 0;
}
/*
6
5 5 14
S*#*.
.#...
.....
****.
...#.

..*.P
#.*..
***..
...*.
*.#..
5 5 13
S*#*.
.#...
.....
****.
...#.

..*.P
#.*..
***..
...*.
*.#..
5 5 13
S*#*.
.#...
.....
****.
...#.

..*.P
#.*..
***..
...*.
*.##.
5 5 8
S*#*#
.#**.
.....
*****
...#.

..*.P
#.*..
***..
...*.
*.##.
1 4 3
.#.#
*.#P
1 4 2
.#.#
*.#P
*/
